﻿using QRCoder;
using System.Drawing;

namespace Sinc.ERP.Core.Extensions
{
    public static class QRCoderExtension
    {
        #region 生成二维码
        /// <summary>
        /// 生成二维码 PNG图片
        /// </summary>
        /// <param name="textToEncode"></param>
        /// <returns></returns>
        public static byte[] Generate(string textToEncode)
        {
            // 1. 创建 QRCodeGenerator 实例
            var qrGenerator = new QRCodeGenerator();
            // 2. 使用 CreateQrCode 方法生成 QRCodeData 对象
            //    - textToEncode: 要编码的文本
            //    - eccLevel: 纠错级别 (ErrorCorrectionLevel)，可选值有 L, M, Q, H (H 最高)
            var qrCodeData = qrGenerator.CreateQrCode(textToEncode, QRCodeGenerator.ECCLevel.Q);
            // 3. 使用 QRCode 类将 QRCodeData 渲染为 Bitmap (图片)
            //    - qrCodeData: 上一步生成的 QRCodeData 对象
            //    - pixelsPerModule: 每个模块 (黑点或空白) 的像素大小
            //    - darkColor: 前景色 (通常是黑色)
            //    - lightColor: 背景色 (通常是白色)
            //    - logo: 可选的 Logo 图片 (Bitmap)
            //    - logoSizePercent: Logo 占二维码的百分比 (0-100)
            //    - logoPosition: Logo 的位置 (QRCode.LogoPosition 枚举)
            var qrCode = new PngByteQRCode(qrCodeData);
            var qrCodeImage = qrCode.GetGraphic(20, Color.Black, Color.White);
            return qrCodeImage.ToArray();
        }
        #endregion

        #region 生成二维码到路径
        /// <summary>
        /// 生成二维码到路径
        /// </summary>
        /// <param name="textToEncode"></param>
        /// <param name="filePath"></param>
        public static void Generate(string textToEncode, string filePath)
        {
            var fileDirectory = Path.GetDirectoryName(filePath);
            if (!Directory.Exists(fileDirectory))
                Directory.CreateDirectory(fileDirectory);

            var pngBytes = Generate(textToEncode);
            File.WriteAllBytes(filePath, pngBytes);
        }
        #endregion
    }
}
